package cn.nuc.edu.onlinestore.service.impl;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import cn.nuc.edu.onlinestore.dao.UserMapper;
import cn.nuc.edu.onlinestore.entity.SysFunction;
import cn.nuc.edu.onlinestore.entity.Sysuser;
import cn.nuc.edu.onlinestore.service.interfaces.IUserService;
import cn.nuc.edu.onlinestore.util.PageControl;
import cn.nuc.edu.onlinestore.util.Pager;


/**
 * 用户业务逻辑类
 * @author 王凯
 *
 */
@Service
public class UserService implements IUserService {

	/**
	 * 用户映射器
	 */
	@Autowired
	private UserMapper dao;
	
	/**
	 * 用户登录
	 */
	public Sysuser login(Sysuser user) {
		return dao.login(user);
	}

	/**
	 * 初始化用户功能界面
	 */
	public List<SysFunction> initpage(Sysuser user) {
		return dao.initpage(user);
	}
	
	/**
	 * 修改用户密码
	 * @param oldpass 旧密码
	 * @param newpass 新密码
	 * @param userid 用户id
	 * @return 修改密码操作的结果,>0表示操作成功
	 */
	@Transactional
	public Integer alterPassword(String oldpass, String newpass, Integer userid){
		Map<String, Object> paramMap = new HashMap<>();
		paramMap.put("oldpass", oldpass);
		paramMap.put("newpass", newpass);
		paramMap.put("userid", userid);
		return dao.alterPassword(paramMap);
	}
	
	/**
	 * 账户充值（事务）
	 * @param userid 用户id
	 * @param charge 充值金额
	 * @return 处理结果
	 */
	@Transactional
	public Integer accountCharge(Integer userid, Float charge) {
		Integer rtn = 1;
		
		//得到账户的详细信息
		Sysuser user = new Sysuser();
		user.setUserid(userid);
		user = dao.detail(user);
		
		//账户余额累加
		user.setUseraccount(user.getUseraccount() + charge);
		
		//修改账户余额
		rtn = dao.alterAccount(user);
		
		return rtn;
	}
	
	/**
	 * 账户消费（事务）
	 * @param userid 用户id
	 * @param consume 消费金额
	 * @return 处理结果
	 */
	@Transactional
	public Integer accountConsume(Integer userid, Float consume) {
		Integer rtn = 1;
		
		//得到用户的详细信息
		Sysuser user = new Sysuser();
		user.setUserid(userid);
		user = dao.detail(user);
		
		//账户余额扣减
		user.setUseraccount(user.getUseraccount() - consume);
		
		//修改账户余额
		rtn = dao.alterAccount(user);
		
		return rtn;
	}
	
	/**
	 * 分页查询用户信息
	 * 
	 * @param pc 分页信息实体
	 * @param keyword 搜索关键字
	 * @return 携带查询结果和分页信息的实体
	 */
	public Pager<Sysuser> list(PageControl pc, String keyword) {
		//获取封装的分页参数
		Map<String, Object> paramMap = new HashMap<>();
		paramMap.put("currentindex", pc.getCurrentindex());
		paramMap.put("pagesize", pc.getPagesize());
		paramMap.put("keyword", keyword);
		
		//执行分页查询操作
		List<Sysuser> userlist = dao.list(paramMap);
		
		//封装分页信息
		Pager<Sysuser> pager = new Pager<>();
		pager.setList(userlist);
		pc.setRscount(userlist.size());
		pager.setPagectrl(pc);
		
		return pager;
	}
	
	/**
	 * 获取用户的详细信息
	 * @param user 用户实体（只携带用户id）
	 * @return 用户的详细信息
	 */
	public Sysuser detail(Sysuser user) {
		return dao.detail(user);
	}
	
	/**
	 * 编辑用户信息
	 * 
	 * @param user 已经修改好的信息
	 * @return 修改操作受影响的行数，>0表示修改成功
	 */
	@Transactional
	public Integer edit(Sysuser user) {
		return dao.edit(user);
	}
	
	/**
	 * 添加用户
	 * @param user 用户实体
	 * @return 执行插入操作受影响的行数,>0表示增加操作成功
	 */
	@Transactional
	public Integer add(Sysuser user) {
		return dao.add(user);
	}

}
